package sgeb;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.DefaultListModel;
import javax.swing.ListModel;

/**
 * Controlador equipo Clase encargada de gestionar todas las acciones
 *
 * @author Pablo TOrres Alba
 */
public class ControlEquipos implements ActionListener {

    private VistaAdmin vistaAdministrativo;
    private String[][] ligas;
    private String[] datosEquipo;

    /**
     * Constructor de la clase
     *
     * @param vista Vista con al que trabajará el controlador
     * @author Pablo Torres
     */
    public ControlEquipos(VistaAdmin vista) {
	this.vistaAdministrativo = vista;
    }

    /**
     * Inserta un nuevo entrenador en el sistema
     */
    public boolean altaEquipo(String categoria, String nombre, int visitante, String horario, int entrenadorID) {
	Equipo nuevoEquipo;
	nuevoEquipo = new Equipo(categoria, nombre, visitante, horario, entrenadorID);
	boolean exito = nuevoEquipo.AltaEquipo();
	return exito;
    }

    public String[] consultarEquipo(String nombre) {
	try {
	    System.out.print(nombre);
	    String[] datosEquipo = new String[50];
	    Equipo equipoConsultado = new Equipo();
	    equipoConsultado.ConsultaEquipo(nombre);

	    datosEquipo[0] = equipoConsultado.GetCategoria();
	    datosEquipo[1] = Integer.toString(equipoConsultado.GetEquipoID());

	    String[][] datos_entrenadores = null;
	    datos_entrenadores = new Entrenador().GetEntrenadores();

	    int posentrenador = -1;
	    for (int i = 0; i < datos_entrenadores.length; i++) {
		if (Integer.parseInt(datos_entrenadores[i][0]) == equipoConsultado.GetEntrenadorID()) {
		    posentrenador = i;
		}
	    }
	    datosEquipo[2] = Integer.toString(datos_entrenadores.length) + "," + posentrenador;
	    for (int i = 0; i < datos_entrenadores.length; i++) {
		datosEquipo[2] = datosEquipo[2] + "," + datos_entrenadores[i][1];
	    }
	    for (int i = 0; i < datos_entrenadores.length; i++) {
		datosEquipo[2] = datosEquipo[2] + "," + datos_entrenadores[i][0];
	    }
	    System.out.println(datosEquipo[2]);

	    datosEquipo[3] = equipoConsultado.GetNombre();
	    datosEquipo[4] = Integer.toString(equipoConsultado.GetPartidosGanados());
	    datosEquipo[5] = Integer.toString(equipoConsultado.GetPartidosPerdidos());
	    datosEquipo[6] = Integer.toString(equipoConsultado.GetVisitante());
	    datosEquipo[7] = equipoConsultado.GetHorario();

	    if (datosEquipo[3].equals(null)) {
		datosEquipo = null;
	    }
	    return datosEquipo;

	} catch (Exception e) {
	    return null;
	}
    }

    public String getEntrenadores() {
	try {
	    String[] datosEquipo = new String[50];

	    String[][] datos_entrenadores = null;
	    datos_entrenadores = new Entrenador().GetEntrenadores();

	    int posentrenador = -1;
	    datosEquipo[2] = Integer.toString(datos_entrenadores.length) + "," + posentrenador;
	    for (int i = 0; i < datos_entrenadores.length; i++) {
		datosEquipo[2] = datosEquipo[2] + "," + datos_entrenadores[i][1];
	    }
	    for (int i = 0; i < datos_entrenadores.length; i++) {
		datosEquipo[2] = datosEquipo[2] + "," + datos_entrenadores[i][0];
	    }
	    System.out.println(datosEquipo[2]);
	    return datosEquipo[2];
	} catch (Exception e) {
	    return null;
	}
    }

    /**
     * Da de baja un equipo del sistema
     */
    public boolean bajaEquipo(int equipoID) {
	return new Equipo().BajaEquipo(equipoID);
    }

    /*private String categoria;
     private int equipoID;
     private int entrenadorID;
     private String nombre;
     private int partidosGanados;
     private int partidosPerdidos;
     private int visitante;
     private String horario;*/
    /**
     * Modifica un entrenador
     */
    public boolean modificarEquipo(int equipoID, String categoria, String nombre, int partidosGanados, int partidosPerdidos, int entrenadorID, int visitante, String horario) {
	return new Equipo().ModificarEquipo(equipoID, categoria, nombre, partidosGanados, partidosPerdidos, entrenadorID, visitante, horario);
    }

    /**
     * Inicia los listener de los botones de la vista
     */
    public void iniciar() {
	this.vistaAdministrativo.setVisible(true);
	this.vistaAdministrativo.BotonGuardarEquipo.setActionCommand("Guardar equipo");
	this.vistaAdministrativo.BotonBuscarEquipo.setActionCommand("Buscar equipo");
	this.vistaAdministrativo.BotonBorrarEquipo.setActionCommand("Borrar equipo");
	this.vistaAdministrativo.botonAgregarEquipo.setActionCommand("Agregar equipo");
	this.vistaAdministrativo.CategoriaComboBox.setActionCommand("Seleccion categoria");

	this.vistaAdministrativo.BotonGuardarEquipo.addActionListener(this);
	this.vistaAdministrativo.BotonBuscarEquipo.addActionListener(this);
	this.vistaAdministrativo.BotonBorrarEquipo.addActionListener(this);
	this.vistaAdministrativo.botonAgregarEquipo.addActionListener(this);
	this.vistaAdministrativo.CategoriaComboBox.addActionListener(this);
    }

    /**
     * Da la funcionalidad a cada uno de los botones
     *
     * @param e Evento que dispara las distinta acciones
     */
    public void actionPerformed(ActionEvent e) {
	String comando = e.getActionCommand();
	if (comando.equals("Guardar equipo")) {
	    //Si vamos agregar uno nuevo
	    if (this.vistaAdministrativo.ultimoBotonPulsado() == 8) {
		datosEquipo = this.vistaAdministrativo.getDatosEquipo();
		//Date fechaNacimiento = new Date(Integer.parseInt(datosAlu[4]), Integer.parseInt(datosAlu[3]), Integer.parseInt(datosAlu[2]));
		//Date fechaActual = new Date();
		boolean exito = this.altaEquipo(datosEquipo[0], datosEquipo[3], Integer.parseInt(datosEquipo[6]), datosEquipo[7], Integer.parseInt(datosEquipo[2]));
		datosEquipo = this.consultarEquipo(datosEquipo[3]);
		if (this.vistaAdministrativo.EquipoLiga.getSelectedIndex() >= 0) {
		    Liga liga = new Liga();
		    liga.consultaLiga(String.valueOf(this.vistaAdministrativo.EquipoLiga.getSelectedItem()));
		    liga.altaEquipo(Integer.parseInt(datosEquipo[1]));
		}
		this.vistaAdministrativo.insertarPanel(this.vistaAdministrativo.PanelEquipoGuardado);
	    }

	    if (this.vistaAdministrativo.ultimoBotonPulsado() == 7) {
		datosEquipo = this.vistaAdministrativo.getDatosEquipo();
		/*Categoria
		 * nombre
		 * pg
		 * pp
		 * entre
		 * visitante
		 * horar
		 * equipid
		 */
		boolean exito = this.modificarEquipo(Integer.parseInt(datosEquipo[1]), datosEquipo[0], datosEquipo[3], Integer.parseInt(datosEquipo[4]), Integer.parseInt(datosEquipo[5]), Integer.parseInt(datosEquipo[2]), Integer.parseInt(datosEquipo[6]), datosEquipo[7]);
		//Si hay liga seleccionada
		if (this.vistaAdministrativo.EquipoLiga.getSelectedIndex() >= 0) {
		    Liga liga = new Liga();
		    liga.consultaLiga(String.valueOf(this.vistaAdministrativo.EquipoLiga.getSelectedItem()));
		    liga.altaEquipo(Integer.parseInt(datosEquipo[1]));
		}
		this.vistaAdministrativo.insertarPanel(this.vistaAdministrativo.PanelEquipoGuardado);
	    }
	}

	if (comando.equals("Buscar equipo")) {
	    String nombre = this.vistaAdministrativo.EquipoTextField.getText();
	    String[] datosEquipo = this.consultarEquipo(nombre);
	    if (datosEquipo != null) {
		//Nos traemos las ligas
		Liga liga = new Liga();
		ligas = liga.GetLigas(datosEquipo[0]);
		String[] nombre_ligas = new String[ligas.length];
		for (int i = 0; i < ligas.length; i++) {
		    nombre_ligas[i] = ligas[i][1];
		}
		this.vistaAdministrativo.EquipoLiga.setModel(new javax.swing.DefaultComboBoxModel(nombre_ligas));
		this.vistaAdministrativo.setDatosEquipo(datosEquipo);
		String[] jugadores = new Equipo().GetJugadores(Integer.parseInt(this.vistaAdministrativo.EquipoEquipoID.getText()));
		if (jugadores != null) {
		    this.vistaAdministrativo.ListaJugadores.setListData(jugadores);
		} else {
		    String[] vacia = new String[1];
		    vacia[0] = "";
		    this.vistaAdministrativo.ListaJugadores.setListData(vacia);
		}

	    } else {
		this.vistaAdministrativo.flag_equipo_no_encontrado = true;
	    }
	}

	if (comando.equals("Agregar equipo")) {
	    String datos = this.getEntrenadores();
	    if (datos != null) {
		this.vistaAdministrativo.InicializarCamposEquipoEntrenador(datos);
	    }
	}

	if (comando.equals("Borrar equipo")) {
	    int equipoID = Integer.parseInt(this.vistaAdministrativo.EquipoEquipoID.getText());
	    if (equipoID > 0) {
		if(this.bajaEquipo(equipoID)){
		    this.vistaAdministrativo.insertarPanel(this.vistaAdministrativo.PanelEquipoBorrado);
		}
	    }
	    
	}

	if (comando.equals("Seleccion categoria")) {
	    //Nos traemos las ligas
	    Liga liga = new Liga();
	    String[][] ligas = liga.GetLigas(String.valueOf(this.vistaAdministrativo.CategoriaComboBox.getSelectedItem()));
	    String[] nombre_ligas = new String[ligas.length];
	    for (int i = 0; i < ligas.length; i++) {
		nombre_ligas[i] = ligas[i][1];
	    }
	    this.vistaAdministrativo.EquipoLiga.setModel(new javax.swing.DefaultComboBoxModel(nombre_ligas));
	}

    }
}
